package com.itheima.d1_serialize;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

//目标：掌握对象字节输出流ObjectOutputStream往文件中写出对象
public class Demo01 {
    public static void main(String[] args) throws Exception {
        /**
         * ObjectOutputStream(OutputStream out)：
         *      把低级字节输出流包装成高级的对象字节输出流
         *
         * void writeObject(Object obj)：
         *      把对象写出去到对象序列化流的文件中去
         *
         * 注意：被写入对象的类必须实现Serializable接口
         *
         * 需求：
         *      分别创建一个Teacher对象和一个Student对象，使用对象序列化流把对象持久的存储到文件中保存
         *      创建一个Person对象，将其存储到文件中保存
         */

        //1.分别创建Student和Teacher对象
        Student stu = new Student("张三", 23);
        Teacher tea = new Teacher("泷泽萝拉", 28);

        //2.创建对象字节输出流对象，提供基础的字节输出流对象（FileOutputStream）
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day10-io&thread\\resources\\obj.txt"));

        //3.写出Student对象（注意：Student类未实现Serializable接口）
        //oos.writeObject(stu); //爆出异常：NotSerializableException

        //写出Teacher对象
        //oos.writeObject(tea);

        //4.创建一个Person对象，将其存储到文件中保存
        Person person = new Person("大桥未久", 35, stu);
        //注意：如果一个对象的类自己实现了Serializable接口，但是引用类型的属性没有实现，序列化依然会失败！
        oos.writeObject(person);
        //解决：可以指定这个没有实现Serializable接口的这个属性，不参与序列化操作，使用transient修饰属性即可

        //刷新和释放资源
        oos.flush();
        oos.close();
    }
}
